package edu.codelibary.common.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * @ClassName: FileUtil
 * @Description: 文件操作类
 * @author: zhangxingyu QQ 292583003
 * @date:2013-1-7 上午10:53:17
 */
public class FileUtil {
	/**
	 * @Title: newFile
	 * @Description: 新建文件
	 * @param @param f 文件
	 * @return boolean 是否成功
	 */
	public static boolean newFile(File f) {
		try {
			f.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 * 复制单个文件
	 * 
	 * @param oldPath源文件路径
	 *            如：/xx
	 * @param newPath复制后路径
	 *            ,如：/xx/ss
	 * @return boolean 是否成功
	 */

	public static boolean copyFile(String oldPath, String newPath) {
		try {
			int bytesum = 0;
			int byteread = 0;
			String f_new = "";
			File f_old = new File(oldPath);
			if (newPath.endsWith(File.separator)) {
				f_new = newPath + f_old.getName();
			} else {
				f_new = newPath + File.separator + f_old.getName();
			}
			// 如果文件夹不存在，则建立新文件夹
			new File(newPath).mkdirs();
			// 如果文件不存在，则建立新文件
			new File(f_new).createNewFile();
			// 文件存在时
			if (f_old.exists()) {
				// 读入原文件
				InputStream inStream = new FileInputStream(oldPath);
				FileOutputStream fs = new FileOutputStream(f_new);
				byte[] buffer = new byte[1024];
				while ((byteread = inStream.read(buffer)) != -1) {
					// 文件总字节数
					bytesum += byteread;
					fs.write(buffer, 0, byteread);
				}
				inStream.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 * 复制文件夹<br/>
	 * 
	 * @param oldPath
	 *            原文件路径 如：/aa/bb
	 * @param newPath
	 *            原文件路径 如：/ss/cc
	 * @return boolean 是否成功
	 */
	public static boolean copyDir(String oldPath, String newPath) {
		try {
			copyDir(newPath, newPath);
			// 要复制的文件夹路径 /aa/bb
			File f_old = new File(oldPath);
			String d_old = "";
			// 新文件夹路径
			String d_new = newPath + File.separator + f_old.getName();
			//如果文件夹不存在，则建立新文件夹
			new File(d_new).mkdirs();
			File []files=f_old.listFiles();
			for(int i=0;i<files.length;i++){
				//要复制的文件夹下的文件
				d_old=oldPath+File.separator+files[i].getName();
				if(files[i].isFile()){
					copyFile(d_old, d_new);
				}else
					copyDir(d_old, d_new);
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	/**
	 * TODO 移动文件到指定目录<br/>
	 * @param oldPath	如：/fqf.txt
	 * @param newPath	如：/xx/ff.txt
	 * @return boolean 是否成功
	 */
	public static boolean moveFile(String oldPath,String newPath){
		try{
			if(copyFile(oldPath, newPath)){
				new File(oldPath).delete();
			}
		}catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	/**
	 * TODO 移动文件夹到指定目录<br/>
	 * @param oldPath	如：/xx
	 * @param newPath	如：/cc/xx
	 * @return 是否成功
	 */
	public static boolean moveDir(String oldPath,String newPath){
		try {
			if(copyDir(oldPath, newPath)){
				delDir(new File(oldPath));
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	/**
	 * TODO 删除单个文件<br/>
	 * @param f
	 * @return 是否成功
	 */
	public static boolean delFile(File f){
		try {
			if(f.exists()){
				f.delete();
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
	/**
	 * TODO 删除file文件<br/>
	 * @param file
	 */
	public static boolean delDir(File file) {
		try {
			if(file.exists()){
				File[] files=file.listFiles();
				for(int i=0;i<files.length;i++){
					if(files[i].isDirectory()){
						if(!delDir(files[i])){
							return false;
						}
					}else {
						files[i].delete();
					}
				}
			}
			//删除空文件夹
			file.delete();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		return true;
	}
}
